#ifndef _INC_STUDENT_T_H
#define _INC_STUDENT_T_H

#include <string>

class StudentImpl_t;

class Student_t // [Observer]
{
public:
	/**
	* Ctor
	*/
	Student_t(StudentImpl_t* impl);

	/**
	* Dtor
	*/
	virtual ~Student_t();

	/**
	* Returns student id
	*/
	inline size_t id() const {
		return m_id;
	}

	/**
	* Sets student id
	*/
	inline void setId(size_t id) {
		m_id = id;
	}

	/**
	* Returns student name
	*/
	inline const std::string& name() const {
		return m_name;
	}

	/**
	* Sets student name
	*/
	inline void setName(const std::string& name) {
		m_name = name;
	}

	/**
	* Called from faculty - notifies on message
	*/
	void update(const std::string& message) const;

private:
	/**
	* Copy Ctor - no impl
	*/
	Student_t(const Student_t& other);

	/**
	* Operator= - no impl
	*/
	Student_t& operator=(const Student_t& other);

	size_t m_id;
	std::string m_name;

	StudentImpl_t* m_impl; // [Bridge]
};

#endif // _INC_STUDENT_T_H